﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALAgencia
    {
        public List<BTO.Agencia> list()
        {
            //Pesquisa dados
            var agenciasEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var agencias = (from c in agenciasEntities.Agencia 
                            select new BTO.Agencia
                            {
                                IDAgencia = c.IDAgencia,
                                codAgencia = c.codAgencia,
                                nome = c.nome,
                                morada = c.morada,
                                codPostal = c.codPostal,
                                localidade = c.localidade,
                                telefone = c.telefone,
                                email = c.email,
                                responsavel = c.responsavel

                             }).ToList();
                                   
            return agencias;
        }

        public BTO.Agencia getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var agenciasEntities = new TISModel.TISEntities();
            var agencia = (from c in agenciasEntities.Agencia where c.IDAgencia == id
                            select new BTO.Agencia
                            {
                                IDAgencia = c.IDAgencia,
                                codAgencia = c.codAgencia,
                                nome = c.nome,
                                morada = c.morada,
                                codPostal = c.codPostal,
                                localidade = c.localidade,
                                telefone = c.telefone,
                                email = c.email,
                                responsavel = c.responsavel

                            }).FirstOrDefault();
           
            return agencia;     
            
        }

        public BTO.Agencia getByName(String nome)
        {
            //Pesquisa dados e cria modelo para retornar
            var agenciasEntities = new TISModel.TISEntities();
            var agencia = (from c in agenciasEntities.Agencia where c.nome == nome 
                            select new BTO.Agencia
                            {
                                IDAgencia = c.IDAgencia,
                                codAgencia = c.codAgencia,
                                nome = c.nome,
                                morada = c.morada,
                                codPostal = c.codPostal,
                                localidade = c.localidade,
                                telefone = c.telefone,
                                email = c.email,
                                responsavel = c.responsavel

                            }).FirstOrDefault();

            return agencia;
        }

        public BTO.Agencia getByCodAgencia(string codAgencia) {
           
            //Pesquisa dados e cria modelo para retornar
            var agenciasEntities = new TISModel.TISEntities();
            var agencia = (from c in agenciasEntities.Agencia
                           where c.codAgencia == codAgencia
                           select new BTO.Agencia
                           {
                               IDAgencia = c.IDAgencia,
                               codAgencia = c.codAgencia,
                               nome = c.nome,
                               morada = c.morada,
                               codPostal = c.codPostal,
                               localidade = c.localidade,
                               telefone = c.telefone,
                               email = c.email,
                               responsavel = c.responsavel

                           }).FirstOrDefault();

            return agencia;
        }

        public void insert(BTO.Agencia toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var agenciaEntities = new TISModel.TISEntities();

                TISModel.Agencia agencia = new TISModel.Agencia();
                agencia.codAgencia = toInsert.codAgencia;
                agencia.nome = toInsert.nome;
                agencia.morada = toInsert.morada;
                agencia.codPostal = toInsert.codPostal;
                agencia.localidade = toInsert.localidade;
                agencia.telefone = toInsert.telefone;
                agencia.email = toInsert.email;
                agencia.responsavel = toInsert.responsavel;

                agenciaEntities.AddToAgencia(agencia);
                agenciaEntities.SaveChanges();

            }
            catch(Exception) {
                throw new System.Exception("Não foi Possível inserir a agencia!");
            }
        }

        public void update(BTO.Agencia toUpdate)
        {               
            var agenciaEntities = new TISModel.TISEntities();
            var agencia = (from c in agenciaEntities.Agencia where c.IDAgencia == toUpdate.IDAgencia select c).FirstOrDefault();


            if (agencia != null)
            {
                try
                {
                    agencia.codAgencia = toUpdate.codAgencia;
                    agencia.nome = toUpdate.nome;
                    agencia.morada = toUpdate.morada;
                    agencia.codPostal = toUpdate.codPostal;
                    agencia.localidade = toUpdate.localidade;
                    agencia.telefone = toUpdate.telefone;
                    agencia.email = toUpdate.email;
                    agencia.responsavel = toUpdate.responsavel;

                    agenciaEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível actualizar a agencia!");
                }
            }
            else {
                throw new System.Exception("Agencia não encontrada!");
            }
            
        }

        public void delete(int id)
        {
            var agenciaEntities = new TISModel.TISEntities();
            var agencia = (from c in agenciaEntities.Agencia where c.IDAgencia == id select c).FirstOrDefault();

            if (agencia != null)
            {
                try
                {
                    agenciaEntities.DeleteObject(agencia);
                    agenciaEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível remover a agencia!");
                }
            }
            else
            {
                throw new System.Exception("Agencia não encontrada!");
            }
            
        }
    }
}
